﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CLab.BusinessEntity;
using GandA.Component.DataAccess.SQLServer;
using CLab.Common.Constantes;
using System.Data;

namespace CLab.DAO
{
    public class RecepcionServiceDAO
    {
        public static int RegistraRecepcion(Recepcion recepcion)
        {
            SQLParameterCollection paramsSql = new SQLParameterCollection();

            paramsSql.Add(new SQLParameter(Parametros.pnIdLaboratorio, recepcion.Paciente.IdLaboratorio, SQLParameter.vEnumSqlDbType.Int, SQLParameter.vEnumParameterDirection.vInput));
            paramsSql.Add(new SQLParameter(Parametros.pnIdPaciente, recepcion.Paciente.IdPaciente, SQLParameter.vEnumSqlDbType.Int, SQLParameter.vEnumParameterDirection.vInput));
            paramsSql.Add(new SQLParameter(Parametros.pnIdTitulo, recepcion.Paciente.IdTitulo, SQLParameter.vEnumSqlDbType.Int, SQLParameter.vEnumParameterDirection.vInput));
            paramsSql.Add(new SQLParameter(Parametros.psNombre, recepcion.Paciente.Nombre, SQLParameter.vEnumSqlDbType.VarChar, SQLParameter.vEnumParameterDirection.vInput));
            paramsSql.Add(new SQLParameter(Parametros.psApellidoPaterno, recepcion.Paciente.ApellidoPaterno, SQLParameter.vEnumSqlDbType.VarChar, SQLParameter.vEnumParameterDirection.vInput));
            paramsSql.Add(new SQLParameter(Parametros.psApellidoMaterno, recepcion.Paciente.ApellidoMaterno, SQLParameter.vEnumSqlDbType.VarChar, SQLParameter.vEnumParameterDirection.vInput));
            paramsSql.Add(new SQLParameter(Parametros.pnEdad, recepcion.Paciente.Edad, SQLParameter.vEnumSqlDbType.Int, SQLParameter.vEnumParameterDirection.vInput));
            paramsSql.Add(new SQLParameter(Parametros.pnIdTiempo, recepcion.Paciente.IdTiempo, SQLParameter.vEnumSqlDbType.Int, SQLParameter.vEnumParameterDirection.vInput));
            paramsSql.Add(new SQLParameter(Parametros.pnIdSexo, recepcion.Paciente.IdSexo, SQLParameter.vEnumSqlDbType.Int, SQLParameter.vEnumParameterDirection.vInput));
            if (recepcion.Paciente.fur == new DateTime())
                paramsSql.Add(new SQLParameter(Parametros.ptfur, DBNull.Value, SQLParameter.vEnumSqlDbType.Date, SQLParameter.vEnumParameterDirection.vInput));
            else
                paramsSql.Add(new SQLParameter(Parametros.ptfur, recepcion.Paciente.fur, SQLParameter.vEnumSqlDbType.Date, SQLParameter.vEnumParameterDirection.vInput));

            paramsSql.Add(new SQLParameter(Parametros.pnIdEstado, recepcion.Paciente.IdEstado, SQLParameter.vEnumSqlDbType.Int, SQLParameter.vEnumParameterDirection.vInput));
            paramsSql.Add(new SQLParameter(Parametros.pnIdMunicipio, recepcion.Paciente.IdMunicipio, SQLParameter.vEnumSqlDbType.Int, SQLParameter.vEnumParameterDirection.vInput));
            paramsSql.Add(new SQLParameter(Parametros.pnCodigoPostal, recepcion.Paciente.CodigoPostal, SQLParameter.vEnumSqlDbType.BigInt, SQLParameter.vEnumParameterDirection.vInput));
            paramsSql.Add(new SQLParameter(Parametros.pnIdColonia, recepcion.Paciente.IdColonia, SQLParameter.vEnumSqlDbType.Int, SQLParameter.vEnumParameterDirection.vInput));
            paramsSql.Add(new SQLParameter(Parametros.psCalle, recepcion.Paciente.Calle, SQLParameter.vEnumSqlDbType.VarChar, SQLParameter.vEnumParameterDirection.vInput));
            paramsSql.Add(new SQLParameter(Parametros.psNumeroExt, recepcion.Paciente.NumeroExt, SQLParameter.vEnumSqlDbType.VarChar, SQLParameter.vEnumParameterDirection.vInput));
            paramsSql.Add(new SQLParameter(Parametros.psNumeroInt, recepcion.Paciente.NumeroInt, SQLParameter.vEnumSqlDbType.VarChar, SQLParameter.vEnumParameterDirection.vInput));
            paramsSql.Add(new SQLParameter(Parametros.psTelefono, recepcion.Paciente.Telefono, SQLParameter.vEnumSqlDbType.VarChar, SQLParameter.vEnumParameterDirection.vInput));
            paramsSql.Add(new SQLParameter(Parametros.pnIdProcedencia, recepcion.Paciente.IdProcedencia, SQLParameter.vEnumSqlDbType.Int, SQLParameter.vEnumParameterDirection.vInput));
            paramsSql.Add(new SQLParameter(Parametros.psIpMod, recepcion.IpMod, SQLParameter.vEnumSqlDbType.VarChar, SQLParameter.vEnumParameterDirection.vInput));
            paramsSql.Add(new SQLParameter(Parametros.pnIdUsuarioMod, recepcion.IdUsuarioMod, SQLParameter.vEnumSqlDbType.Int, SQLParameter.vEnumParameterDirection.vInput));
            paramsSql.Add(new SQLParameter(Parametros.pnIdSucursal, recepcion.Paciente.IdSucursal, SQLParameter.vEnumSqlDbType.Int, SQLParameter.vEnumParameterDirection.vInput));
            paramsSql.Add(new SQLParameter(Parametros.pnIdDoctor, recepcion.Paciente.IdDoctor, SQLParameter.vEnumSqlDbType.Int, SQLParameter.vEnumParameterDirection.vInput));
            paramsSql.Add(new SQLParameter(Parametros.psEstudios, recepcion.Recibo.DetalleXml, SQLParameter.vEnumSqlDbType.VarChar, SQLParameter.vEnumParameterDirection.vInput));

            try
            {
                DataSet ds = new SQL().ExecuteQueryStoreProcedure("spGuardaPaciente", paramsSql);
                return CLab.Common.Util.Convert.ToInt(ds.Tables[0].Rows[0][Columnas.IdRecibo].ToString());
            }
            catch (SQLException ex)
            {
                throw new Exception(ex.Message);
            }
        }

        public static void CancelaRecibo(Recibo obj)
        {
            SQLParameterCollection paramsSql = new SQLParameterCollection();

            paramsSql.Add(new SQLParameter(Parametros.pnIdRecibo, obj.IdRecibo, SQLParameter.vEnumSqlDbType.Int, SQLParameter.vEnumParameterDirection.vInput));
            paramsSql.Add(new SQLParameter(Parametros.pnIdLaboratorio, obj.IdLaboratorio, SQLParameter.vEnumSqlDbType.Int, SQLParameter.vEnumParameterDirection.vInput));
            paramsSql.Add(new SQLParameter(Parametros.pnIdUsuarioMod, obj.IdUsuarioMod, SQLParameter.vEnumSqlDbType.Int, SQLParameter.vEnumParameterDirection.vInput));
            paramsSql.Add(new SQLParameter(Parametros.psIpMod, obj.IpMod, SQLParameter.vEnumSqlDbType.VarChar, SQLParameter.vEnumParameterDirection.vInput));
            paramsSql.Add(new SQLParameter(Parametros.pnIdSucursal, obj.IdSucursal, SQLParameter.vEnumSqlDbType.Int, SQLParameter.vEnumParameterDirection.vInput));
               
            try
            {
                new SQL().ExecuteNonQueryStoreProcedure("spCancelaRecibo", paramsSql);
            }
            catch (SQLException ex)
            {
                throw new Exception(ex.Message);
            }
        }
    }
}
